package com.cy.pj.common.pojo;

import lombok.*;

import java.io.Serializable;
import java.util.List;

/**
 * @author 张琪
 * @date 2020/11/13
 * @describe 此对象在业务逻辑层封装分页信息(可以理解为业务层POJO对象)
 * 类上定义泛型, 来实现通用编程
 * 使用lombok生成 构造函数 get/set方法
 */
/*
* 在Java所有的封装数据对象中, 大部分都实现了Serializable接口, 方便对对象进行序列化/反序列化
* 1) 序列化(钝化): 对象->字节
* 2) 反序列化(): 字节->对象
*
* 序列化应用场景?
*   1) 对象->字节后, 存储到内存中
*   2) 内存 >> 文件
*   3) 对象->字节后, 在网络上传输
*
* 序列化对象设计规范
*   1) 实现Serializable接口
*   2) 添加序列化id serialVersionUID
*
* */
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class PageObject<T> implements Serializable {
    //当泛型定义在类或接口名的右侧时这种泛型叫类泛型
    /*
    Serializable接口, 方便对象序列化为流的形式
    当我们编写POJO对象时, 必须让他实现Serializable(存储数据的类都需要实现, 通过他传数据)
    */
    //添加序列化id
    private static final long serialVersionUID = 5544661217275220683L;

    /**
     * 总记录数
     */
    private Integer rowCount;

    /**
     * 当前页记录
     */
    private List<T> records;

    /**
     * 总页数
     */
    private Integer pageCount;

    /**
     * 每页最多记录数
     */
    private Integer pageSize;

    /**
     * 当前页数
     */
    private Integer pageCurrent;

    public PageObject(Integer rowCount, List<T> records, Integer pageSize, Integer pageCurrent) {
        this.rowCount = rowCount;
        this.records = records;
        this.pageSize = pageSize;
        this.pageCurrent = pageCurrent;
    }
}

